package com.xpoint.backend.common;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
/*
* 实现mybatis plus的MetaObjectHandler接口
* 在更新与添加操作的时候，会运行insertFill和updateFill方法
* metaObject参数包含操作的字段，可以通过metaObject修改字段值
*
* 通过TreadLocal（在BaseContext），在过滤器位置设置request的当前线程局部变量（设置当前登录的id）
* 在本类获取线程的TreadLocal中局部变量，然后设置给当前操作数据库的字段，达成减少代码复杂性的操作。
* */
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
//        System.out.println("MyMetaObjectHandler========="+metaObject.getValue("create_time"));
//        给操作数据库的create_time字段，设置成当前时间
        metaObject.setValue("createTime", LocalDateTime.now());
//        给操作数据库的update_time字段，设置成当前时间
        metaObject.setValue("updateTime", LocalDateTime.now());
//        给操作数据库的create_user字段，设置成当前操作的用户id，值是通过线程局部变量获取的
        metaObject.setValue("createUser", BaseContext.getCurrentId());
//        给操作数据库的update_user字段，设置成当前操作的用户id，值是通过线程局部变量获取的
        metaObject.setValue("updateUser", BaseContext.getCurrentId());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
//        给操作数据库的create_time字段，设置成当前时间
        metaObject.setValue("createTime", LocalDateTime.now());
//        给操作数据库的update_time字段，设置成当前时间
        metaObject.setValue("updateTime", LocalDateTime.now());
//        给操作数据库的create_user字段，设置成当前操作的用户id，值是通过线程局部变量获取的
        metaObject.setValue("createUser", BaseContext.getCurrentId());
//        给操作数据库的update_user字段，设置成当前操作的用户id，值是通过线程局部变量获取的
        metaObject.setValue("updateUser", BaseContext.getCurrentId());
    }
}
